import axios from 'axios'

// 创建axios实例
const api = axios.create({
  baseURL: '/api', // 基础URL，会自动添加到请求URL前面
  timeout: 10000, // 请求超时时间
  withCredentials: true // 允许携带cookie，用于跨域请求时保持会话
})

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 在发送请求前做些什么
    return config
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  response => {
    // 对响应数据做些什么
    const res = response.data
    
    // 如果返回的状态码不是200，说明接口有问题，直接抛出错误
    if (res.code !== 200) {
      // 401: 未登录或token过期
      if (res.code === 401) {
        // 清除本地存储的用户信息
        localStorage.removeItem('user')
        // 重定向到登录页
        window.location.href = '/dist/#/login'
      }
      
      return Promise.reject(new Error(res.message || '未知错误'))
    }
    
    return res
  },
  error => {
    // 对响应错误做些什么
    console.error('API请求错误:', error)
    
    if (error.response) {
      // 服务器返回了错误状态码
      console.log('错误状态码:', error.response.status)
      
      if (error.response.status === 401) {
        // 未授权，清除用户信息并重定向到登录页
        localStorage.removeItem('user')
        window.location.href = '/dist/#/login'
      } else if (error.response.status === 404) {
        // 对于404错误，不重定向，只在控制台输出错误信息
        console.error('资源未找到:', error.config.url)
        // 返回一个空结果，避免页面崩溃
        return Promise.resolve({ 
          code: 200, 
          data: { 
            list: [], 
            total: 0, 
            current: 1, 
            size: 10, 
            pages: 0 
          } 
        })
      }
    }
    
    return Promise.reject(error)
  }
)

// 用户相关API
export const userApi = {
  // 登录
  login(data) {
    return api.post('/user/login', data)
  },
  
  // 注册
  register(data) {
    return api.post('/user/register', data)
  },
  
  // 获取当前用户信息
  getCurrentUser() {
    return api.get('/user/current')
  },
  
  // 检查用户名是否存在
  checkUsername(username) {
    return api.get(`/user/checkUsername?username=${encodeURIComponent(username)}`)
  },
  
  // 获取用户列表
  getUsers(page = 1, size = 10) {
    return api.get(`/user/list?pageNum=${page}&pageSize=${size}`)
  },
  
  // 获取用户详情
  getUser(id) {
    return api.get(`/user/detail/${id}`)
  },

  // 添加用户
  addUser(data) {
    return api.post('/user/add', data)
  },

  // 更新用户
  updateUser(data) {
    return api.put('/user/update', data)
  },
  
  // 删除用户
  deleteUser(id) {
    return api.delete(`/user/delete/${id}`)
  },
  
  // 退出登录
  logout() {
    return api.post('/user/logout')
  }
}

// 二维码相关API
export const qrcodeApi = {
  // 获取二维码列表
  getQRCodes(page = 1, size = 10) {
    return api.get(`/qrcode/list?page=${page}&size=${size}`)
  },
  
  // 获取当前用户的二维码列表
  getCurrentUserQRCodes(page = 1, size = 10) {
    return api.get(`/qrcode/my?page=${page}&size=${size}`)
  },
  
  // 获取二维码详情
  getQRCode(id) {
    return api.get(`/qrcode/${id}`)
  },
  
  // 创建二维码
  createQRCode(data) {
    return api.post('/qrcode/create', data)
  },
  
  // 更新二维码
  updateQRCode(data) {
    return api.put('/qrcode/update', data)
  },
  
  // 删除二维码
  deleteQRCode(id) {
    return api.delete(`/qrcode/delete/${id}`)
  },
  
  // 保存二维码图片
  saveQRCodeImage(id, imageData) {
    return api.post(`/qrcode/saveImage/${id}`, { imageData })
  }
}

// 分类相关API
export const categoryApi = {
  // 获取分类列表
  getCategories() {
    return api.get('/category/list')
  },
  
  // 获取分类详情
  getCategory(id) {
    return api.get(`/category/${id}`)
  },
  
  // 创建分类
  createCategory(data) {
    return api.post('/category/create', data)
  },
  
  // 更新分类
  updateCategory(data) {
    return api.put('/category/update', data)
  },
  
  // 删除分类
  deleteCategory(id) {
    return api.delete(`/category/delete/${id}`)
  }
}

export default api